/* * TreeViewerPanel.java * * Copyright (C) 2006-2014 Andrew Rambaut * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package figtree.treeviewer; import jebl.evolution.io.TreeImporter; import jebl.evolution.io.NexusImporter; import jebl.evolution.trees.Tree; import jam.controlpalettes.BasicControlPalette; import jam.controlpalettes.ControlPalette; import javax.swing.*; import java.awt.*; import java.io.File; import java.io.FileReader; import java.io.Reader; import java.io.BufferedReader; import figtree.treeviewer.painters.LabelPainterController; import figtree.treeviewer.painters.NodeBarController; import figtree.treeviewer.painters.NodeBarPainter; import figtree.treeviewer.painters.BasicLabelPainter; /** * This is a panel that has a TreeViewer and a BasicControlPalette with * the default Controllers and Painters. * * @author Andrew Rambaut * @version $Id$ * * $HeadURL$ * * $LastChangedBy$ * $LastChangedDate$ * $LastChangedRevision$ */ public class TreeViewerPanel extends JPanel { public TreeViewerPanel(JFrame frame, TreeViewer treeViewer, ControlPalette controlPalette) { this.treeViewer = treeViewer; this.controlPalette = controlPalette; controlPalette.getPanel().setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.GRAY)); controlPalette.getPanel().setBackground(new Color(231, 237, 246)); controlPalette.getPanel().setOpaque(true); controlPalette.addController(new TreeViewerController(treeViewer)); // This controller handles reading/writing of attribute colour schemes but doesn't presently // show any UI AttributeColourController attributeColourController = new AttributeColourController(treeViewer, frame); controlPalette.addController(attributeColourController); controlPalette.addController(new TreeAppearanceController(treeViewer, frame, attributeColourController)); controlPalette.addController(new TreesController(treeViewer)); // Create a tip label painter and its controller BasicLabelPainter tipLabelPainter = new BasicLabelPainter(BasicLabelPainter.PainterIntent.TIP); controlPalette.addController(new LabelPainterController("Tip Labels", "tipLabels", tipLabelPainter, frame, attributeColourController, treeViewer)); treeViewer.setTipLabelPainter(tipLabelPainter); // Create a node label painter and its controller BasicLabelPainter nodeLabelPainter = new BasicLabelPainter(BasicLabelPainter.PainterIntent.NODE); nodeLabelPainter.setVisible(false); controlPalette.addController(new LabelPainterController("Node Labels", "nodeLabels", nodeLabelPainter, frame, attributeColourController, treeViewer)); treeViewer.setNodeLabelPainter(nodeLabelPainter); // Create a node shape painter and its controller NodeBarPainter nodeBarPainter = new NodeBarPainter(); nodeBarPainter.setForeground(new Color(24, 32, 228, 128)); nodeBarPainter.setVisible(false); controlPalette.addController(new NodeBarController("Node Bars", nodeBarPainter, treeViewer)); treeViewer.setNodeBarPainter(nodeBarPainter); // Create a branch label painter and its controller BasicLabelPainter branchLabelPainter = new BasicLabelPainter(BasicLabelPainter.PainterIntent.BRANCH); branchLabelPainter.setVisible(false); controlPalette.addController(new LabelPainterController("Branch Labels", "branchLabels", branchLabelPainter, frame, attributeColourController, treeViewer)); treeViewer.setBranchLabelPainter(branchLabelPainter); // Create a scale bar painter and its controller controlPalette.addController(new TimeScaleController(treeViewer)); setLayout(new BorderLayout()); add(treeViewer, BorderLayout.CENTER); JPanel leftPanel = new JPanel(new BorderLayout()); leftPanel.add(controlPalette.getPanel(), BorderLayout.NORTH); JScrollPane scrollPane = new JScrollPane(leftPanel); add(scrollPane, BorderLayout.WEST); } public TreeViewer getTreeViewer() { return treeViewer; } public ControlPalette getControlPalette() { return controlPalette; } private final TreeViewer treeViewer; private final ControlPalette controlPalette; static public void main(String[] args) { JFrame frame = new JFrame("TreeViewer Test"); TreeViewer treeViewer = new DefaultTreeViewer(frame); ControlPalette controlPalette = new BasicControlPalette(200, BasicControlPalette.DisplayMode.ONLY_ONE_OPEN); frame.getContentPane().add(new TreeViewerPanel(frame, treeViewer, controlPalette), BorderLayout.CENTER); try { File inputFile = null; if (args.length > 0) { inputFile = new File(args[0]); } if (inputFile == null) { // No input file name was given so throw up a dialog box... java.awt.FileDialog chooser = new java.awt.FileDialog(frame, "Select NEXUS Tree File", java.awt.FileDialog.LOAD); chooser.setVisible(true); inputFile = new java.io.File(chooser.getDirectory(), chooser.getFile()); chooser.dispose(); } if (inputFile == null) { throw new RuntimeException("No file specified"); } // TreeImporter importer = new NewickImporter(new FileReader(inputFile)); Reader reader = new BufferedReader(new FileReader(inputFile)); TreeImporter importer = new NexusImporter(reader); java.util.List<Tree> trees = importer.importTrees(); reader.close(); treeViewer.setTrees(trees); } catch (Exception ie) { ie.printStackTrace(); System.exit(1); } frame.setSize(640, 480); frame.setVisible(true); } }